package acciones;

import islenio.IslenioEntornoEstado;
import islenio.IslenioEstado;
import utilidades.Aldea;
import utilidades.Camino;
import frsf.cidisi.faia.agent.search.SearchAction;
import frsf.cidisi.faia.agent.search.SearchBasedAgentState;
import frsf.cidisi.faia.state.AgentState;
import frsf.cidisi.faia.state.EnvironmentState;

public class IrMixocu extends SearchAction {
	 public SearchBasedAgentState execute(SearchBasedAgentState s) {
	        IslenioEstado agentState = (IslenioEstado) s;

	        if(Aldea.contiene(agentState.aldeasRecorridas,agentState.Mixocu)) return null;
	        if(Camino.hayCamino(agentState.getAldeaActual(),agentState.Mixocu,agentState.listaCaminos)){
	        	agentState.actualizarDistanciaRecorrida(agentState.Mixocu);
	        		agentState.setAldeaActual(agentState.Mixocu);
	        		return agentState;
	        	}
	        
	        return null;
	    }

	    public EnvironmentState execute(AgentState ast, EnvironmentState est) {
	        IslenioEstado agentState = (IslenioEstado) ast;
	        IslenioEntornoEstado environmentState = (IslenioEntornoEstado) est;

	        if(Aldea.contiene(IslenioEntornoEstado.aldeasRecorridas, agentState.Mixocu)) return null;
	        if(Camino.hayCamino(agentState.getAldeaActual(),agentState.Mixocu,agentState.listaCaminos)){
	        	agentState.actualizarDistanciaRecorrida(agentState.Mixocu);
	        		agentState.setAldeaActual(agentState.Mixocu);
	        		environmentState.setAldeaActual(IslenioEntornoEstado.Mixocu);
	        		return environmentState;
	        	}
	                
	        return null;
	    }

	    public Double getCost() {
	        return new Double(0);
	    }

	    public String toString() {
	        return "IrMixocu";
	    }

}
